//Wrapper for EE::Color
#pragma once
#include "stdafx.h"

namespace EsenthelNet
{
	public ref class Color {
	internal:
		Color(EE::Color col) {
			color = new EE::Color();
			*color = col;
		}
		Color(EE::Color* col) {
			color = col;
		}
		EE::Color* color;
	public:
		Color() { 
			color = new EE::Color();
		}
		Color(UInt r, UInt g, UInt b) { 
			color = new EE::Color(r, g, b);
		}

		Color(UInt r, UInt g, UInt b, UInt a) { 
			color = new EE::Color(r, g, b, a);
		}

		//Properties:
		property UInt A {
			UInt get() {
				return color->a;
			}
			void set(UInt a) {
				color->a = a;
			}
		}

		property UInt R {
			UInt get() {
				return color->r;
			}
			void set(UInt r) {
				color->r = r;
			}
		}

		property UInt G {
			UInt get() {
				return color->g;
			}
			void set(UInt g) {
				color->g = g;
			}
		}

		property UInt B {
			UInt get() {
				return color->b;
			}
			void set(UInt b) {
				color->b = b;
			}
		}

		//Constants:
		property static Color^ Black { Color^ get() { return gcnew Color(EE::BLACK); } }
		property static Color^ Grey { Color^ get() { return gcnew Color(EE::GREY); } }
		property static Color^ White { Color^ get() { return gcnew Color(EE::WHITE); } }
		property static Color^ Red { Color^ get() { return gcnew Color(EE::RED); } }
		property static Color^ Green { Color^ get() { return gcnew Color(EE::GREEN); } }
		property static Color^ Blue { Color^ get() { return gcnew Color(EE::BLUE); } }
		property static Color^ Yellow { Color^ get() { return gcnew Color(EE::YELLOW); } }
		property static Color^ Cyan { Color^ get() { return gcnew Color(EE::CYAN); } }
		property static Color^ Purple { Color^ get() { return gcnew Color(EE::PURPLE); } }
		property static Color^ Orange { Color^ get() { return gcnew Color(EE::ORANGE); } }
		property static Color^ Turq { Color^ get() { return gcnew Color(EE::TURQ); } }

	};
}